unit VendaAbertaTransRecordFr;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, ComCtrls, DBCtrls, ActnList, DBGrids, Buttons, ExtCtrls, EditBtn,
  Calendar, ACBrRFD, MainTransactionRecordFr, DataRecord, types;

type

  { TVendaAbertaTransRecordFrame }

  TVendaAbertaTransRecordFrame = class(TMainTransactionRecordFrame)
    BitBtn1: TBitBtn;
    btnLancarBoleto: TBitBtn;
    btnPrazo: TBitBtn;
    btnLancar: TBitBtn;
    BtnGerar: TBitBtn;
    ComboPagamentoTransferencia: TDBLookupComboBox;
    ComboPagamentoBoleto: TDBLookupComboBox;
    CondPagamentoCartao: TDBLookupComboBox;
    DBCalendar: TDBCalendar;
    DBEdit1: TDBEdit;
    DBGrid3: TDBGrid;
    DBGrid4: TDBGrid;
    DBGrid5: TDBGrid;
    DBGroupBox3: TDBGroupBox;
    DBGroupBox6: TDBGroupBox;
    DBNavigator3: TDBNavigator;
    DBNavigator4: TDBNavigator;
    diaVencimentoTransferencia: TDateEdit;
    diaVencimentoCartao: TDateEdit;
    diaVencimentoBoleto: TDateEdit;
    AcrescimoEdit: TEdit;
    DescontoCartaoDBEdit: TEdit;
    DescontoChequeDBEdit: TEdit;
    descontoEditTransferencia: TEdit;
    descontoEditBoleto: TEdit;
    GarconDBLookupComboBox: TDBLookupComboBox;
    DBNavigator1: TDBNavigator;
    DBNavigator2: TDBNavigator;
    GroupBox2: TGroupBox;
    IDCaixaEdit: TEdit;
    DescontoAvEdit: TEdit;
    Garcon: TLabel;
    Label11: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Label38: TLabel;
    Label39: TLabel;
    Label40: TLabel;
    Label41: TLabel;
    Label42: TLabel;
    Label43: TLabel;
    Label44: TLabel;
    Label45: TLabel;
    Label7: TLabel;
    Panel10: TPanel;
    Panel12: TPanel;
    Panel16: TPanel;
    Panel18: TPanel;
    Panel19: TPanel;
    Panel5: TPanel;
    TotalCartaoPainel: TPanel;
    TotalTransferenciaPainel: TPanel;
    TotalBoletoPainel: TPanel;
    TransferenciaTabSheet: TTabSheet;
    BoletoTabSheet: TTabSheet;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton9: TToolButton;
    TotalPainel: TDBText;
    GravaVendaDadosAction: TAction;
    GerarDuplicatasVendaAction: TAction;
    diaVencimentoCheque: TDateEdit;
    Label9: TLabel;
    BuscarProduto: TBitBtn;
    codigoEdit: TEdit;
    ComboPagamento: TDBLookupComboBox;
    CondPagamentoCheque: TDBLookupComboBox;
    valor: TDBText;
    Desconto: TDBEdit;
    descontoProdutoEdit: TEdit;
    descricaoEdit: TEdit;
    DetailDBGrid: TDBGrid;
    DetailDBNavigator: TDBNavigator;
    DetailGroupBox: TGroupBox;
    IdClienteDbEdit: TDBEdit;
    IdVendaEdit: TDBEdit;
    IdVenda: TDBEdit;
    Label1: TLabel;
    Label10: TLabel;
    Label16: TLabel;
    Label23: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    MasterGroupBox: TGroupBox;
    NomePessoaDbEdit: TDBEdit;
    PainelTroco: TPanel;
    Panel1: TPanel;
    Panel11: TPanel;
    Panel13: TPanel;
    Panel14: TPanel;
    Panel15: TPanel;
    Panel17: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    quantidadeEdit: TEdit;
    RecordPageControl: TPageControl;
    ProdutoTabSheet: TTabSheet;
    FinalizacaoTabSheet: TTabSheet;
    SiglaPagamento: TDBRadioGroup;
    RemoverItensProdutos: TSpeedButton;
    ToolBar1: TToolBar;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    FinalizaPagamento: TToolButton;
    DBEdit5: TDBEdit;
    DBLookupComboBox2: TDBLookupComboBox;
    TotalChequePainel: TPanel;
    TotalDinheiroPainel: TPanel;
    Painel: TPanel;
    Label5: TLabel;
    TotalPrazoPainel: TPanel;
    TrocoPainel: TPanel;
    valor_total1: TDBText;
    Label24: TLabel;
    valor_total: TDBText;
    CancelarVendaAction: TAction;
    diaVencimento: TDateEdit;
    DBGrid2: TDBGrid;
    MesaDBLookupComboBox: TDBLookupComboBox;
    DBRadioGroup2: TDBRadioGroup;
    StatusCliente: TDBRadioGroup;
    sigla_forma_pagamento: TDBRadioGroup;
    GravarVendaAction: TAction;
    CartaoTabSheet: TTabSheet;
    Label20: TLabel;
    Label4: TLabel;
    Label8: TLabel;
    Panel4: TPanel;
    Gravar: TToolButton;
    cancelar: TToolButton;
    BuscarCliente: TBitBtn;
    data_recebimento1: TDBEdit;
    DBEdit3: TDBEdit;
    DBGrid1: TDBGrid;
    DBGroupBox1: TDBGroupBox;
    DBGroupBox2: TDBGroupBox;
    DBGroupBox4: TDBGroupBox;
    DBGroupBox5: TDBGroupBox;
    dinheiroEdit: TEdit;
    GroupBox1: TGroupBox;
    id_entrada1: TDBEdit;
    id_fornecedor: TDBEdit;
    Mesa: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label17: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label6: TLabel;
    nome_pessoa: TDBEdit;
    Pagamento: TPageControl;
    AvistaTabSheet: TTabSheet;
    ChequeTabSheet: TTabSheet;
    AprazoTabSheet: TTabSheet;
    VendaToolBar: TToolBar;
    procedure AcrescimoEditKeyPress(Sender: TObject; var Key: char);
    procedure BtnGerarClick(Sender: TObject);
    procedure btnLancarBoletoClick(Sender: TObject);
    procedure btnLancarClick(Sender: TObject);
    procedure BuscarProdutoClick(Sender: TObject);
    procedure BuscarClienteClick(Sender: TObject);
    procedure DescontoCartaoDBEditKeyPress(Sender: TObject; var Key: char);
    procedure DescontoChequeDBEditKeyPress(Sender: TObject; var Key: char);
    procedure descontoEditBoletoKeyPress(Sender: TObject; var Key: char);
    procedure descontoEditTransferenciaKeyPress(Sender: TObject; var Key: char);
    procedure descricaoEditChange(Sender: TObject);
    procedure dinheiroEditKeyPress(Sender: TObject; var Key: char);
    procedure FecharActionExecute(Sender: TObject);
    procedure GerarDuplicatasPrazoClick(Sender: TObject);
    procedure GerarChequesClick(Sender: TObject);
    procedure cancelarClick(Sender: TObject);
    procedure codigoEditKeyPress(Sender: TObject; var Key: char);
    constructor Create(TheOwner: TComponent); override;
    procedure DescontoAvEditKeyPress(Sender: TObject; var Key: char);
    procedure FinalizaPagamentoClick(Sender: TObject);
    procedure ControlaBotoes; override;
    procedure MesaDBLookupComboBoxSelect(Sender: TObject);
    procedure SalvarActionExecute(Sender: TObject);
    procedure SetDataRecord(Data: TDataRecord); override;
    procedure GravarClick(Sender: TObject);
    procedure RemoverItensProdutosClick(Sender: TObject);
    procedure SiglaPagamentoChange(Sender: TObject);
    procedure InserirValoresIniciais();
    procedure FinalizaVendaAvista(IDCliente: integer);
    procedure FinalizaVendaAprazo(IDCliente: integer);
    procedure FinalizaVendaCartao(IDCliente: integer);
    procedure FinalizaVendaCheque(IDCliente: integer);
    procedure FinalizaVendaBoleto(IDCliente: integer);
    procedure FinalizaVendaTransferencia(IDCliente: integer);
    procedure AlteraStatusMesa(Tipo: string);

  private
    { private declarations }
    CurrentForeign: string;
  public
    { public declarations }
  end;

//!Alterar a forma de Inserir e alterar a Venda

implementation

uses
  Initializator, MainFr, VendaAbertaDM, VendaFrDM, DuplicataReceberDM,
  MainDM, MainFm, MesaDM;

{ TVendaAbertaTransRecordFrame }

//******************************************************************//
//Construtor

constructor TVendaAbertaTransRecordFrame.Create(TheOwner: TComponent);
var
  Verifica: boolean;
begin
  inherited Create(TheOwner);
  RecordPageControl.ActivePage := ProdutoTabSheet;
  Verifica := VendaAbertaData.VerificaSeSistemaRestaurante();
  if Verifica = True then begin
    Mesa.Visible := True;
    MesaDBLookupComboBox.Visible := True;
    Garcon.Visible := True;
    GarconDBLookupComboBox.Visible := True;
  end else begin
    Mesa.Visible := False;
    MesaDBLookupComboBox.Visible := False;
    Garcon.Visible := False;
    GarconDBLookupComboBox.Visible := False;
  end;
end;

//***********************************************************************//
//Controlar os Botoes//
procedure TVendaAbertaTransRecordFrame.ControlaBotoes();
var
  I: integer;
begin
  if InTransaction then begin
    RecordToolBar.Enabled := False;
    for I := 0 to RecordActionList.ActionCount - 1 do begin
      TAction(RecordActionList.Actions[i]).Enabled := False;
    end;
    Gravar.Enabled := True;
    cancelar.Enabled := True;
    FinalizaPagamento.Enabled := False;
    VendaToolBar.Enabled := True;
    for I := 0 to Self.ComponentCount - 1 do begin
      if Self.Components[I] is TDBLookupComboBox then begin
        TControl(Self.Components[I]).Enabled := True;
      end;
    end;
  end else begin
    inherited ControlaBotoes();
    MesaDBLookupComboBox.Enabled := True;
    RecordToolBar.Enabled := True;
    Gravar.Enabled := False;
    cancelar.Enabled := False;
    FinalizaPagamento.Enabled := AlterarAction.Enabled;
    VendaToolBar.Enabled := False;
  end;
end;

procedure TVendaAbertaTransRecordFrame.MesaDBLookupComboBoxSelect(Sender: TObject);
var
  Verifica: boolean;
begin
  if VendaAbertaData.DataSetState() in [mdsInserting] then begin
    //Está em modo de Inserção não fazer nada
    VendaAbertaData.VendaAbertaZQuery.FieldByName('id_mesa').AsString :=
      MesaDBLookupComboBox.KeyValue;
  end else begin
    Verifica := VendaAbertaData.BuscaVendasMesa(MesaDBLookupComboBox.KeyValue);
    if Verifica = False then begin
      ShowMessage('A mesa ' + MesaDBLookupComboBox.Text + ' está Livre');
      VendaAbertaData.LimpaValoresVenda();
    end;
  end;
end;

procedure TVendaAbertaTransRecordFrame.SalvarActionExecute(Sender: TObject);
begin
  //Alterar para Ocupado
  AlteraStatusMesa('O');
  inherited;
end;

//Data Record//
procedure TVendaAbertaTransRecordFrame.SetDataRecord(Data: TDataRecord);
begin
  if CurrentForeign = 'P' then begin
    codigoEdit.Text := Data.getValue('codigo_barra');
    descricaoEdit.Text := Data.getValue('desc_produto');
    descontoProdutoEdit.Text := Data.getValue('desconto');
  end else begin
    Data.WriteToDataSet(VendaAbertaData.VendaZQuery);
  end;
end;

//Controla a ação dos Radios
procedure TVendaAbertaTransRecordFrame.SiglaPagamentoChange(Sender: TObject);
begin
  AvistaTabSheet.Enabled := False;
  CartaoTabSheet.Enabled := False;
  ChequeTabSheet.Enabled := False;
  AprazoTabSheet.Enabled := False;
  TransferenciaTabSheet.Enabled := False;
  BoletoTabSheet.Enabled := False;
  if SiglaPagamento.ItemIndex = 0 then begin
    Pagamento.ActivePage := AvistaTabSheet;
    AvistaTabSheet.Enabled := True;
  end else if SiglaPagamento.ItemIndex = 1 then begin
    Pagamento.ActivePage := CartaoTabSheet;
    CartaoTabSheet.Enabled := True;
  end else if SiglaPagamento.ItemIndex = 2 then begin
    Pagamento.ActivePage := ChequeTabSheet;
    ChequeTabSheet.Enabled := True;
  end else if SiglaPagamento.ItemIndex = 3 then begin
    Pagamento.ActivePage := AprazoTabSheet;
    AprazoTabSheet.Enabled := True;
  end else if SiglaPagamento.ItemIndex = 4 then begin
    Pagamento.ActivePage := TransferenciaTabSheet;
    TransferenciaTabSheet.Enabled := True;
  end else if SiglaPagamento.ItemIndex = 5 then begin
    Pagamento.ActivePage := BoletoTabSheet;
    BoletoTabSheet.Enabled := True;
  end;
end;

//Valores Iniciais
procedure TVendaAbertaTransRecordFrame.InserirValoresIniciais();
var
  Data: string;
begin
  TotalDinheiroPainel.Caption := TotalPainel.Caption;
  dinheiroEdit.Text := TotalPainel.Caption;
  TotalCartaoPainel.Caption := TotalPainel.Caption;
  TotalChequePainel.Caption := TotalPainel.Caption;
  TotalPrazoPainel.Caption := TotalPainel.Caption;
  TotalTransferenciaPainel.Caption := TotalPainel.Caption;
  TotalBoletoPainel.Caption := TotalPainel.Caption;
  Data := VendaAbertaData.BuscaData();
  DBCalendar.Date := Data;
  diaVencimento.Text := Data;
  diaVencimentoCheque.Text := Data;
  diaVencimentoCartao.Text := Data;
  diaVencimentoBoleto.Text := Data;
  diaVencimentoTransferencia.Text := Data;
end;


//******************************************************************//
//Ações nos campos para Descontos
procedure TVendaAbertaTransRecordFrame.DescontoAvEditKeyPress(Sender: TObject;
  var Key: char);
var
  desc: real;
begin
  //! Verificar se é 13 para outros SO
  if (key = #13) then begin
    desc := StrToFloatDef(DescontoAvEdit.Text, 0);
    TotalDinheiroPainel.Caption :=
      FloatToStr(StrToFloat(TotalPainel.Caption) - (desc));
    dinheiroEdit.Text := TotalDinheiroPainel.Caption;
    TrocoPainel.Caption := FloatToStr(
      (StrToFloat(dinheiroEdit.Text) - StrToFloat(TotalDinheiroPainel.Caption)));
    dinheiroEdit.SetFocus();
  end;
end;

//******************************************************************//
//Finalização Venda Aberta
procedure TVendaAbertaTransRecordFrame.FinalizaPagamentoClick(Sender: TObject);
var
  IDCaixa: string;
begin
  codigoEdit.Text := '';
  descricaoEdit.Text := '';
  descontoProdutoEdit.Text := '';
  IDCaixa := VendaAbertaData.VerificaCaixaAberto();
  if (IDCaixa = '') then begin
    if MessageDlg('Confirmação', 'Caixa não está Aberto! Deseja Abrir?',
      mtConfirmation, mbYesNo, 0) = mrYes then begin
      TheControl.ShowFrame(TMainFrame(CaixaInicioRecordFrame));
    end;
  end else begin
    //Método que vai inserir os dados na tabela Venda
    VendaAbertaData.PagamentoVenda(MainForm.Usuario);
    //Vai mostrar a página de pagamento
    RecordPageControl.ActivePage := FinalizacaoTabSheet;
    InserirValoresIniciais();
    IDCaixaEdit.Text := IDCaixa;
    ControlaBotoes();
  end;
end;



//******************************************************************//
//Buscar Produtos
procedure TVendaAbertaTransRecordFrame.codigoEditKeyPress(Sender: TObject;
  var Key: char);
var
  quant: real;
  desc: real;
begin
  //! Verificar se é 13 para outros SO
  if (key = #13) then begin
    quant := StrToFloatDef(quantidadeEdit.Text, 0);
    desc := StrToFloatDef(descontoProdutoEdit.Text, 0);
    VendaAbertaData.VendaAdicionaProduto(codigoEdit.Text, quant, desc);
  end;
end;

//***********************************************************************//
//Botões de Buscar cliente, produto, Gerar Duplicatas, Cheques, imprimir//
procedure TVendaAbertaTransRecordFrame.BuscarClienteClick(Sender: TObject);
begin
  CurrentForeign := 'C';
  TheControl.ShowForeignFrame(TMainFrame(ClienteSearchFrame));
end;

procedure TVendaAbertaTransRecordFrame.DescontoCartaoDBEditKeyPress(Sender: TObject;
  var Key: char);
var
  desc: real;
begin
  if (key = #13) then begin
    desc := StrToFloatDef(DescontoCartaoDBEdit.Text, 0);
    TotalCartaoPainel.Caption :=
      FloatToStr(StrToFloat(TotalPainel.Caption) - (desc));
  end;
end;

procedure TVendaAbertaTransRecordFrame.DescontoChequeDBEditKeyPress(Sender: TObject;
  var Key: char);
var
  desc: real;
begin
  if (key = #13) then begin
    desc := StrToFloatDef(DescontoChequeDBEdit.Text, 0);
    TotalChequePainel.Caption :=
      FloatToStr(StrToFloat(TotalPainel.Caption) - (desc));
  end;
end;

procedure TVendaAbertaTransRecordFrame.descontoEditBoletoKeyPress(Sender: TObject;
  var Key: char);
var
  desc: real;
begin
  if (key = #13) then begin
    desc := StrToFloatDef(descontoEditBoleto.Text, 0);
    TotalBoletoPainel.Caption :=
      FloatToStr(StrToFloat(TotalPainel.Caption) - (desc));
  end;

end;

procedure TVendaAbertaTransRecordFrame.descontoEditTransferenciaKeyPress(
  Sender: TObject; var Key: char);
var
  desc: real;
begin
  if (key = #13) then begin
    desc := StrToFloatDef(descontoEditTransferencia.Text, 0);
    TotalTransferenciaPainel.Caption :=
      FloatToStr(StrToFloat(TotalPainel.Caption) - (desc));
  end;
end;

procedure TVendaAbertaTransRecordFrame.descricaoEditChange(Sender: TObject);
begin
  codigoEdit.SetFocus();
end;

procedure TVendaAbertaTransRecordFrame.dinheiroEditKeyPress(Sender: TObject;
  var Key: char);
var
  DinheiroAV: real;
begin
  if (key = #13) then begin
    DinheiroAV := StrToFloatDef(dinheiroEdit.Text, 0);
    TrocoPainel.Caption := FloatToStr(DinheiroAV -
      StrToFloat(TotalDinheiroPainel.Caption));
  end;
end;

procedure TVendaAbertaTransRecordFrame.FecharActionExecute(Sender: TObject);
begin
  inherited;
  TheControl.ShowFrame(TMainFrame(ControleMesaFrame));
  ControleMesaFrame.BuscaMesas();
end;

procedure TVendaAbertaTransRecordFrame.GerarDuplicatasPrazoClick(Sender: TObject);
begin
  if (ComboPagamento.Text = '') or (diaVencimento.Text = '') then begin
    ShowMessage('Selecione uma condição de Pagamento ou Data');
  end else
  if IdClienteDbEdit.Text = '1' then begin
    ShowMessage('Selecione um Cliente!');
  end else begin
    if (StatusCliente.ItemIndex = 0) then begin
      VendaAbertaData.GeraDuplicataReceber(StrToInt(IDVenda.Text),
        StrToDate(diaVencimento.Text), StrToInt(IdClienteDbEdit.Text),
        ComboPagamento.KeyValue, StrToFloat(TotalPrazoPainel.Caption),
        StrToInt(IDCaixaEdit.Text), 'P');
    end else
      ShowMessage('Não é possivel gerar duplicatas! STATUS do Cliente!');
  end;
end;

procedure TVendaAbertaTransRecordFrame.GerarChequesClick(Sender: TObject);
begin
  if (CondPagamentoCheque.Text = '') or (diaVencimentoCheque.Text = '') then begin
    ShowMessage('Selecione uma condição de Pagamento ou Data');
  end else begin
    if IdClienteDbEdit.Text <> '1' then begin
      VendaAbertaData.GeraDuplicataReceber(StrToInt(IdVendaEdit.Text),
        StrToDate(diaVencimentoCheque.Text), StrToInt(IdClienteDbEdit.Text),
        CondPagamentoCheque.KeyValue, StrToFloat(TotalChequePainel.Caption),
        StrToInt(IDCaixaEdit.Text), 'C');
      VendaAbertaData.GeraCheques(StrToInt(IdVendaEdit.Text),
        StrToInt(IdClienteDbEdit.Text));
    end else
      ShowMessage('Cliente Inválido!');
  end;
end;


procedure TVendaAbertaTransRecordFrame.BuscarProdutoClick(Sender: TObject);
begin
  CurrentForeign := 'P';
  TheControl.ShowForeignFrame(TMainFrame(ProdutoSearchFrame));
end;

procedure TVendaAbertaTransRecordFrame.BtnGerarClick(Sender: TObject);
begin
  if (CondPagamentoCartao.Text = '') or (diaVencimentoCartao.Text = '') then begin
    ShowMessage('Selecione um Cartão ou Data!');
  end else begin
    VendaAbertaData.GeraDuplicataReceber(StrToInt(IdVendaEdit.Text),
      StrToDate(diaVencimentoCartao.Text), StrToInt(IdClienteDbEdit.Text),
      CondPagamentoCartao.KeyValue, StrToFloat(TotalCartaoPainel.Caption),
      StrToInt(IDCaixaEdit.Text), 'T');
  end;
end;

procedure TVendaAbertaTransRecordFrame.AcrescimoEditKeyPress(Sender: TObject;
  var Key: char);
var
  acre: real;
begin
  if (key = #13) then begin
    acre := StrToFloatDef(AcrescimoEdit.Text, 0);
    TotalPrazoPainel.Caption :=
      FloatToStr(StrToFloat(TotalPainel.Caption) + (acre));
  end;
end;

procedure TVendaAbertaTransRecordFrame.btnLancarBoletoClick(Sender: TObject);
begin
  if (ComboPagamentoBoleto.Text = '') or (diaVencimentoBoleto.Text = '') then begin
    ShowMessage('Selecione uma Condição de Pagamento ou Data!');
  end else begin
    if (IdClienteDbEdit.Text = '1') then begin
      ShowMessage('Cliente Inválido');
    end else begin
      VendaAbertaData.GeraDuplicataReceber(StrToInt(IdVendaEdit.Text),
        StrToDate(diaVencimentoBoleto.Text), StrToInt(IdClienteDbEdit.Text),
        ComboPagamentoBoleto.KeyValue, StrToFloat(TotalBoletoPainel.Caption),
        StrToInt(IDCaixaEdit.Text), 'B');
    end;
  end;
end;

procedure TVendaAbertaTransRecordFrame.btnLancarClick(Sender: TObject);
begin
  if (ComboPagamentoTransferencia.Text = '') or
    (diaVencimentoTransferencia.Text = '') then begin
    ShowMessage('Selecione uma Condição de Pagamento ou Data!');
  end else begin
    if IdClienteDbEdit.Text = '1' then begin
      ShowMessage('Cliente Inválido');
    end else begin
      VendaAbertaData.GeraDuplicataReceber(StrToInt(IdVendaEdit.Text),
        StrToDate(diaVencimentoTransferencia.Text), StrToInt(IdClienteDbEdit.Text),
        ComboPagamentoTransferencia.KeyValue,
        StrToFloat(TotalTransferenciaPainel.Caption),
        StrToInt(IDCaixaEdit.Text), 'F');
      ShowMessage('Lançamento Realizado com Sucesso!');
    end;
  end;
end;

procedure TVendaAbertaTransRecordFrame.RemoverItensProdutosClick(Sender: TObject);
begin
  VendaAbertaData.VendaRemoveProduto();
end;

//***********************************************************************//
//Finalização da Venda//
procedure TVendaAbertaTransRecordFrame.GravarClick(Sender: TObject);
var
  IDCliente: integer;
  Imprimir: string;
begin
  if MessageDlg('Confirmação', 'Imprimir Comprovante?', mtConfirmation, mbYesNo, 0) =
    mrYes then begin
    VendaAbertaData.Imprimir();
  end;
  AlteraStatusMesa('L');
  IDCliente := StrToIntDef(IdClienteDbEdit.Text, 1);
  //Forma de Pagamento A Vista
  if SiglaPagamento.ItemIndex = 0 then begin
    FinalizaVendaAvista(IDCliente);

    //Forma de Pagamento com Cartão
  end else if SiglaPagamento.ItemIndex = 1 then begin
    FinalizaVendaCartao(IDCliente);

    //Forma de Pagamento com Cheque
  end else if SiglaPagamento.ItemIndex = 2 then begin
    FinalizaVendaCheque(IDCliente);

    //Forma de Pagamento A Prazo
  end else if SiglaPagamento.ItemIndex = 3 then begin
    FinalizaVendaAprazo(IDCliente);

    //Forma de Pagamento Transferencia
  end else if SiglaPagamento.ItemIndex = 4 then begin
    FinalizaVendaTransferencia(IDCliente);

    //Forma de Pagamento Boleto
  end else if SiglaPagamento.ItemIndex = 5 then begin
    FinalizaVendaBoleto(IDCliente);
  end;

  RecordPageControl.ActivePage := ProdutoTabSheet;
  quantidadeEdit.Text := '1';
  descontoProdutoEdit.Text := '0';
  VendaAbertaData.LimpaTabelasChequePrazo();
  ControlaBotoes();
end;

procedure TVendaAbertaTransRecordFrame.cancelarClick(Sender: TObject);
begin
  VendaAbertaData.CancelaPagamentoVenda();
  RecordPageControl.ActivePage := ProdutoTabSheet;
  ControlaBotoes();
end;

procedure TVendaAbertaTransRecordFrame.FinalizaVendaAvista(IDCliente: integer);
var
  DescontoA: real;
begin
  DescontoA := StrToFloatDef(DescontoAvEdit.Text, 0);
  //Insere a Venda no Caixa - Tabela(CaixaVenda) do banco
  VendaAbertaData.InsereVendaCaixa(IDCaixaEdit.Text, IdVendaEdit.Text,
    TotalDinheiroPainel.Caption, 'D', MainForm.Usuario);
  //Insere Conta Movimentacao
  VendaAbertaData.AtualizaMovConta(TotalDinheiroPainel.Caption,MainForm.Usuario,IDCaixaEdit.Text);
  //Atualiza o Saldo da Conta
  VendaAbertaData.AtualizaSaldo(IDCaixaEdit.Text, TotalDinheiroPainel.Caption);
  //Fecha o Pagamento em dinheiro
  VendaAbertaData.FechaPagamentoDinheiro(IDCliente, DescontoA);
end;

procedure TVendaAbertaTransRecordFrame.FinalizaVendaAprazo(IDCliente: integer);
var
  Acre: real;
begin
  Acre := StrToFloatDef(AcrescimoEdit.Text, 0);
  //Insere a Venda no Caixa
  VendaAbertaData.InsereVendaCaixa(IDCaixaEdit.Text, IdVendaEdit.Text,
    TotalPrazoPainel.Caption, 'P', MainForm.Usuario);
  //Finaliza a Venda
  VendaAbertaData.FechaPagamentoPrazo(IDCliente, 'P', Acre);
end;

procedure TVendaAbertaTransRecordFrame.FinalizaVendaCartao(IDCliente: integer);
var
  DescontoC: real;
begin
  DescontoC := StrToFloatDef(DescontoCartaoDBEdit.Text, 0);
  //Insere a Venda no CaixaVenda
  VendaAbertaData.InsereVendaCaixa(IDCaixaEdit.Text, IdVendaEdit.Text,
    TotalCartaoPainel.Caption, 'T', MainForm.Usuario);
  //Fecha a Venda feita com Cartão
  VendaAbertaData.FechaPagamentoCartao(IDCliente, DescontoC, 'T');
end;

procedure TVendaAbertaTransRecordFrame.FinalizaVendaCheque(IDCliente: integer);
var
  DescontoCH: real;
begin
  DescontoCH := StrToFloatDef(DescontoChequeDBEdit.Text, 0);
  //Insere a Venda no CaixaVenda
  VendaAbertaData.InsereVendaCaixa(IDCaixaEdit.Text, IdVendaEdit.Text,
    TotalChequePainel.Caption, 'C', MainForm.Usuario);
  //Finaliza a Venda e retorna a Venda Aberta
  VendaAbertaData.FechaPagamentoCheque(IDCliente, DescontoCH, 'C');
end;

procedure TVendaAbertaTransRecordFrame.FinalizaVendaBoleto(IDCliente: integer);
var
  DescontoB: real;
begin
  DescontoB := StrToFloatDef(descontoEditBoleto.Text, 0);
  //Insere a Venda no CaixaVenda
  VendaAbertaData.InsereVendaCaixa(IDCaixaEdit.Text, IdVendaEdit.Text,
    TotalBoletoPainel.Caption, 'B', MainForm.Usuario);
  //Finaliza a Venda e retorna a Venda Aberta
  VendaAbertaData.FechaPagamentoBoleto(IDCliente, DescontoB, 'B');
end;

procedure TVendaAbertaTransRecordFrame.FinalizaVendaTransferencia(IDCliente: integer);
var
  DescontoT: real;
begin
  DescontoT := StrToFloatDef(descontoEditTransferencia.Text, 0);
  //Insere a Venda no CaixaVenda
  VendaAbertaData.InsereVendaCaixa(IDCaixaEdit.Text, IdVendaEdit.Text,
    TotalTransferenciaPainel.Caption, 'F', MainForm.Usuario);
  //Finaliza a Venda e retorna a Venda Aberta
  VendaAbertaData.FechaPagamentoTransferencia(IDCliente, DescontoT, 'F');
end;

procedure TVendaAbertaTransRecordFrame.AlteraStatusMesa(Tipo: string);
var
  I: integer;
begin
  with MesaData.MesaZQuery do begin
    for I := 1 to RecordCount do begin
      RecNo := I;
      if tipo = 'O' then begin
        if FieldByName('desc_mesa').AsString = MesaDBLookupComboBox.Text then begin
          Edit();
          if Tipo = 'O' then begin
            FieldByName('status').AsString := 'O';
          end else begin
            FieldByName('status').AsString := 'L';
          end;
          Post();
        end;
      end else if tipo = 'L' then begin
        if FieldByName('id_mesa').AsString = VendaAbertaData.VendaAbertaZQuery.FieldByName('id_mesa').AsString then begin
          Edit();
          FieldByName('status').AsString := 'L';
          Post();
        end;
      end;
    end;
  end;
end;

initialization
  {$I vendaabertatransrecordfr.lrs}

end.
